relookup type node after class creation and parent class' object
authorTim Janik <timj@gtk.org>
Mon, 16 Nov 1998 06:05:37 +0000 (06:05 +0000)
committerTim Janik <timj@src.gnome.org>
Mon, 16 Nov 1998 06:05:37 +0000 (06:05 +0000)
Mon Nov 16 00:17:53 1998  Tim Janik  <timj@gtk.org>

        * gtk/gtktypeutils.c (gtk_type_new): relookup type node after
        class creation and parent class' object initializer.

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtktypeutils.c

index 06ad4d2e116870e9a5ede74d72d8a463dc3b1c7e..e4ae81d7c5beed100705bdb4090159fbf4bb2b4b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Nov 16 00:17:53 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtktypeutils.c (gtk_type_new): relookup type node after
+       class creation and parent class' object initializer.
+
 1998-11-13  Federico Mena Quintero  <federico@nuclecu.unam.mx>
 
        * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we
index 06ad4d2e116870e9a5ede74d72d8a463dc3b1c7e..e4ae81d7c5beed100705bdb4090159fbf4bb2b4b 100644 (file)
@@ -1,3 +1,8 @@
+Mon Nov 16 00:17:53 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtktypeutils.c (gtk_type_new): relookup type node after
+       class creation and parent class' object initializer.
+
 1998-11-13  Federico Mena Quintero  <federico@nuclecu.unam.mx>
 
        * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we
index 06ad4d2e116870e9a5ede74d72d8a463dc3b1c7e..e4ae81d7c5beed100705bdb4090159fbf4bb2b4b 100644 (file)
@@ -1,3 +1,8 @@
+Mon Nov 16 00:17:53 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtktypeutils.c (gtk_type_new): relookup type node after
+       class creation and parent class' object initializer.
+
 1998-11-13  Federico Mena Quintero  <federico@nuclecu.unam.mx>
 
        * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we
index 06ad4d2e116870e9a5ede74d72d8a463dc3b1c7e..e4ae81d7c5beed100705bdb4090159fbf4bb2b4b 100644 (file)
@@ -1,3 +1,8 @@
+Mon Nov 16 00:17:53 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtktypeutils.c (gtk_type_new): relookup type node after
+       class creation and parent class' object initializer.
+
 1998-11-13  Federico Mena Quintero  <federico@nuclecu.unam.mx>
 
        * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we
index 06ad4d2e116870e9a5ede74d72d8a463dc3b1c7e..e4ae81d7c5beed100705bdb4090159fbf4bb2b4b 100644 (file)
@@ -1,3 +1,8 @@
+Mon Nov 16 00:17:53 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtktypeutils.c (gtk_type_new): relookup type node after
+       class creation and parent class' object initializer.
+
 1998-11-13  Federico Mena Quintero  <federico@nuclecu.unam.mx>
 
        * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we
index 06ad4d2e116870e9a5ede74d72d8a463dc3b1c7e..e4ae81d7c5beed100705bdb4090159fbf4bb2b4b 100644 (file)
@@ -1,3 +1,8 @@
+Mon Nov 16 00:17:53 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtktypeutils.c (gtk_type_new): relookup type node after
+       class creation and parent class' object initializer.
+
 1998-11-13  Federico Mena Quintero  <federico@nuclecu.unam.mx>
 
        * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we
index 06ad4d2e116870e9a5ede74d72d8a463dc3b1c7e..e4ae81d7c5beed100705bdb4090159fbf4bb2b4b 100644 (file)
@@ -1,3 +1,8 @@
+Mon Nov 16 00:17:53 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtktypeutils.c (gtk_type_new): relookup type node after
+       class creation and parent class' object initializer.
+
 1998-11-13  Federico Mena Quintero  <federico@nuclecu.unam.mx>
 
        * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we
index 49074bc8ea1a635b924697f55ab4ea0062bc29e9..165a8d08ca15e04bf9980349ed5ffd5fa1471a56 100644 (file)
@@ -331,19 +331,20 @@ gtk_type_new (GtkType type)
   GtkTypeNode *node;
   GtkTypeObject *tobject;
   gpointer klass;
-  guint i;
   
   LOOKUP_TYPE_NODE (node, type);
   g_return_val_if_fail (node != NULL, NULL);
   
-  klass = gtk_type_class (type);
+  klass = node->klass;
+  if (!klass)
+    {
+      klass = gtk_type_class (type);
+      LOOKUP_TYPE_NODE (node, type);
+    }
   node->chunk_alloc_locked = TRUE;
 
   if (node->mem_chunk)
-    {
-      tobject = g_mem_chunk_alloc (node->mem_chunk);
-      memset (tobject, 0, node->type_info.object_size);
-    }
+    tobject = g_mem_chunk_alloc0 (node->mem_chunk);
   else
     tobject = g_malloc0 (node->type_info.object_size);
   
@@ -352,16 +353,24 @@ gtk_type_new (GtkType type)
    * corresponding base class, otherwise overridden class functions
    * could get called with partly-initialized objects.
    */
-  for (i = node->n_supers; i > 0; i--)
+  if (node->n_supers)
     {
-      GtkTypeNode *pnode;
-      
-      LOOKUP_TYPE_NODE (pnode, node->supers[i]);
-      if (pnode->type_info.object_init_func)
+      guint i;
+      GtkType *supers;
+
+      supers = node->supers;
+      for (i = node->n_supers; i > 0; i--)
        {
-         tobject->klass = pnode->klass;
-         pnode->type_info.object_init_func (tobject);
+         GtkTypeNode *pnode;
+         
+         LOOKUP_TYPE_NODE (pnode, supers[i]);
+         if (pnode->type_info.object_init_func)
+           {
+             tobject->klass = pnode->klass;
+             pnode->type_info.object_init_func (tobject);
+           }
        }
+      LOOKUP_TYPE_NODE (node, type);
     }
   tobject->klass = klass;
   if (node->type_info.object_init_func)